В прошлом шаге я говорил о том, что разницу ref и out легко почувствовать на перечислениях. Смотрим код:
using System;
class MainClass
{
public enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
public static void Functs(ref Days day)
{
day=Days.Sat;
}
public static void Main(string[] args)
{
Days day;
Functs(ref day);
Console.WriteLine(day);
}
}
При компиляции получим ошибку так как Days day; объявляет переменную но ее не инициализирует.

А вот использование out позволяет это сделать.
using System;
class MainClass
{
public enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
public static void Functs(out Days day)
{
day=Days.Sat;
}
public static void Main(string[] args)
{
Days day;
Functs(out day);
Console.WriteLine(day);
}
}
Все нормально, out допускает использование неинициализированный параметров.
